<?php

// +----------------------------------------------------------------------
// | EasyAdmin
// +----------------------------------------------------------------------
// | PHP交流群: 763822524
// +----------------------------------------------------------------------
// | 开源协议 https://mit-license.org
// +----------------------------------------------------------------------
// | github开源项目：https://github.com/zhongshaofa/EasyAdmin
// +----------------------------------------------------------------------
namespace app\api\middleware;

use app\api\service\SystemLogService;
use app\Request;
use EasyAdmin\tool\CommonTool;
use think\facade\Log;

/**
 * 系统操作日志中间件
 * Class SystemLog
 *
 * @package app\admin\middleware
 */
class SystemLog
{

    /**
     * 敏感信息字段，日志记录时需要加密
     *
     * @var array
     */
    protected $sensitiveParams = [
        'password',
        'password_again',
        'phone',
        'mobile'
    ];

    public function handle(Request $request, \Closure $next)
    {
        $params = $request->param();
        if (isset($params['s'])) {
            unset($params['s']);
        }
        foreach ($params as $key => $val) {
            in_array($key, $this->sensitiveParams) && $params[$key] = "***********";
        }
        $method = strtolower($request->method());
        $url = $request->url();
        
        trace([
            'url' => $url,
            'method' => $method,
            'params' => $params
        ], 'requestDebugInfo');
        
        if (in_array($method, [
            'post',
            'put',
            'delete'
        ])) {
            $ip = CommonTool::getRealIp();
            $data = [
                'admin_id' => $request->_UID,
                'url' => $url,
                'method' => $method,
                'ip' => $ip,
                'content' => json_encode($params, JSON_UNESCAPED_UNICODE),
                'useragent' => $_SERVER['HTTP_USER_AGENT'],
                'create_time' => time()
            ];
            SystemLogService::instance()->save($data);
        }
        
        return $next($request);
    }
}